#ifndef _MAP_H_
#define _MAP_H_

#include <vector>

/* qui dentro definiamo la mappa in termini di struct da usare direttamente
 * per il caricamento e il salvataggio su file */

struct MapPosition
{
	float x;
	float y;
};

/* header del file */
struct MapHeader
{
	/* tag mappa */
	unsigned char tag[3];
	/* versione mappa */
	unsigned char version;
	/* nome mappa */
	unsigned char mapName[30];
	/* autore mappa */
	unsigned char mapAuthor[30];
	/* giocatori minimi consigliati */
	unsigned char minPlayers;
	/* giocatori massimi consigliati */
	unsigned char maxPlayers;
	/* flag mappa */
	unsigned char flags;
	/* quanti tileset usa */
	unsigned char tilesetNum;
	/* quante aree contiene */
	unsigned short areasNum;
	/* quanti spawn per i giocatori contiene */
	unsigned short playerSpawnsNum;
	/* quanti spawn per gli oggetti contiene */
	unsigned short itemsSpawnsNum;
	/* quante decorazioni contiene */
	unsigned short decosNum;
};

/* header di un area */
struct MapArea
{
	/* numero vertici */
	unsigned short vertexNum;
	/* tile set della texture */
	unsigned char tileSet;
	/* id della texture */
	unsigned char texture;
	unsigned char flags;
};

struct MapPlayerSpawn
{
	unsigned char flags;
	MapPosition position;
};

struct MapItemSpawn
{
	unsigned char flags;
	/* tempo di respawn, in secondi? */
	unsigned short spawnTime;
	unsigned char itemType;
	unsigned char itemSubtype;
	MapPosition position;
};

struct MapDecoration
{
	unsigned char flags;
	unsigned char type;
	unsigned char subtype;
	float scale;
	float angle;
	MapPosition position;
};

/* TODO: da completare */

class Map
{
	private:
		MapHeader header;
		std::vector<MapArea> areas;
		std::vector<MapPlayerSpawn> playerSpawns;
		std::vector<MapItemSpawn> itemSpawns;
		std::vector<MapDecoration> decorations;
		
	public:
		Map(void);
		~Map(void);
};

#endif
